package com.sunyur.tailor.channel.service.inner.purchase.param;

import lombok.Data;

import java.io.Serializable;
import java.math.BigDecimal;

/**
 * @Author: HuBaoding
 * @Description:
 * @Date: Created in 10:38 2021/5/14
 */
@Data
public class PurchaseApplyCreateByOutsideItemParam implements Serializable{

    /**
     * 申请行外部编号
     */
    private String applyItemOutsideCode;
    /**
     * 申请行类型 0商城商品， 1非目录化
     */
    private Integer itemType;
    /**
     * 物料编码
     */
    private String materialCode;

    /**
     * 物料名称
     */
    private String materialName;

    /**
     * 物料分类编码
     */
    private String materielCategoryCode;


    /**
     * 物料分类名称
     */
    private String materielCategoryName;

    /**
     * 规格编码 注：没有规格，填充空字符串
     */
    private String specCode;


    /**
     * 规格名称 注：没有规格，填充空字符串
     */
    private String specName;


    /**
     * 单位编码 (非目录化传物料单位，商城商品传商品单位)
     */
    private String unitCode;


    /**
     * 单位名称 (非目录化传物料单位，商城商品传商品单位)
     */
    private String unitName;


    /**
     * 品牌
     */
    private String brand;

    /**
     * 采购数量
     */
    private BigDecimal count;

    /**
     * 价格（非目录化参考价，其他类型协议价）
     */
    private BigDecimal price;


    /**
     * 使用人组织编码
     */
    private String userOrgCode;

    /**
     * 使用人组织外部编码
     */
    private String userOrgOutsideCode;

    /**
     * 使用人组织名称
     */
    private String serOrgName;

    /**
     * 使用人姓名
     */
    private String userName;

    /**
     * 使用人工号
     */
    private String userWorkNumber;

    /**
     * 使用人电话
     */
    private String userPhone;


    /**
     * 期望交货期  注：时间戳毫秒格式
     */
    private Long expectDeliveryDate;


    /**
     * 对供应商备注
     */
    private String remark;


    /**
     * 购买说明
     */
    private String purchaseDescribe;


    /**
     * 项目编码  注：如果没有，填充"NO_PROJECT"。 如未开启此功能传递 “” 空串
     */
    private String projectCode;


    /**
     * 项目名称  注：如果没有，填充"无项目"。
     */
    private String projectName;


    /**
     * 收货地址编码
     */
    private String receiveAddressCode;

    /**
     * 收货人姓名
     */
    private String receiveUserName;

    /**
     * 收货人电话
     */
    private String receiveUserPhone;

    /**
     * 物资属性编码
     */
    private String materielAttrCode;

    /**
     * 物资属性名称
     */
    private String materielAttrName;

    /**
     * 库存组织名称
     */
    private String stockOrganizationName;

    /**
     * 库存组织编码
     */
    private String stockOrganizationCode;

    /**
     * 库存地点名称
     */
    private String stockSiteName;

    /**
     * 库存地点编码
     */
    private String stockSiteCode;

    /**
     * 财务数据
     */
    private FinanceInfo financeInfo;

    /**
     * 商城商品前台ID(商品类型必填)
     */
    private Long mallSkuId;

    /**
     * 商品名称
     * 注：非目录化，可以参考商城非目录提报名称
     */
    private String productName;


    @Data
    public class FinanceInfo implements Serializable {
        /**
         * 预算开启类型
         * 1001 无预算（不需要填充预算及预算科目信息）；
         * 1002 商越三级标准预算（需要填充三级预算信息）；
         * 1003 外部预算（需要填充科目数据、budgetTypeCode）；
         */
        private String budgetOpenType;
        /**
         * 预算类型编码（一级）
         * 内部预算类型如下三种：
         * 部门预算：DEPARTMENT_BUDGET_TAG，
         * 项目预算：PROJECT_BUDGET_TAG，
         * 个人预算：PERSON_BUDGET_TAG
         * 外部预算类型由租户确定
         */
        private String budgetTypeCode;
        /**
         * 预算类型展示编码
         */
        private String budgetTypeShowCode;

        /**
         * 预算类型名称
         */
        private String budgetTypeShowName;

        /**
         * 预算外部编码（二级）
         */
        private String budgetOutsideCode;

        /**
         * 预算名称（二级）
         */
        private String budgetName;

        /**
         * 预算编码（二级）
         */
        private String budgetCode;

        /**
         * 预算明细外部编码（三级）
         */
        private String budgetOutsideDetailCode;

        /**
         * 预算明细名称（三级）
         */
        private String budgetDetailName;

        /**
         * 预算明细编码（三级） 注： 商越预算需要填充以上预算信息
         */
        private String budgetDetailCode;

        /**
         * 费用类型外部编码
         */
        private String costOutsideCode;

        /**
         * 费用类型编码
         */
        private String costCode;

        /**
         * 费用类型名称
         */
        private String costName;

        /**
         * 成本中心外部编码
         */
        private String costCenterOutsideCode;

        /**
         * 成本中心编码
         */
        private String costCenterCode;

        /**
         * 成本中心名称
         */
        private String costCenterName;

        /**
         * 受益对象编码
         */
        private String beneficiaryCode;

        /**
         * 受益对象名称
         */
        private String beneficiaryName;

        /**
         * 流程数据外部编码（如：外部预算code）
         * 注： 外部预算需要填充流程数据信息
         */
        private String processOutsideCode;


        /**
         * 流程数据编码
         * 注： 如果预算外部控制，在商越有预算数据，填充商越内部编码。外部预算需要填充流程数据信息
         */
        private String processCode;

        /**
         * 流程数据名称（如：外部预算名称）
         * 注： 外部预算需要填充流程数据信息
         */
        private String processName;


        /**
         * 核算科目外部编码
         */
        private String accountingSubjectOutsideCode;

        /**
         * 核算科目编码
         */
        private String accountingSubjectCode;

        /**
         * 核算科目名称
         */
        private String accountingSubjectName;
    }
}
